Compute Optimizer の推奨事項をS3バケットにエクスポートする【Organizations版】
Compute Optimizer はコンピューティングリソースについて 「適切なインスタンスタイプやストレージ」を 提案してくれるサービスです。
Compute Optimizer による推奨事項は S3バケットにエクスポート可能です。 推奨事項のタイプ(EC2やRDS, EBSなど)ごとにCSV出力できます。
今回は Compute Optimizer のS3出力を実際に試してみます。 出力準備としてS3バケットの準備と、 実際の出力(マネジメントコンソール,AWS CLI)を実施します。
前提
Compute Optimizer 有効化は完了している前提です。 有効化方法については以下公式ドキュメントを参照ください。
また、今回は Organizations 利用環境での出力を試します。 すでに Organizations 連携を有効化しており、 委任管理者も設定済みの前提で進めます。 委任については以下ブログを参照ください。
S3バケットを準備する
委任管理者アカウント上にS3バケットを作成します。
Compute Optimizer から S3バケットにエクスポートができるように、 バケットポリシーを適用します。
以下バケットポリシー例です。 ※ ${S3バケット名}
および ${組織ID}
を置き換えてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "compute-optimizer.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::${S3バケット名}"
},
{
"Effect": "Allow",
"Principal": {
"Service": "compute-optimizer.amazonaws.com"
},
"Action": "s3:GetBucketPolicyStatus",
"Resource": "arn:aws:s3:::${S3バケット名}"
},
{
"Effect": "Allow",
"Principal": {
"Service": "compute-optimizer.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::${S3バケット名}/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control",
"aws:SourceOrgID": "${組織ID}"
}
}
}
]
}
マネジメントコンソールからエクスポートジョブを作成する
今回は2024/11のアップデートで利用可能になった アイドルリソースに関する推奨事項を S3にエクスポートしてみます。
Compute Optimizer のコンソールへアクセスして、 [エクスポート] 画面に遷移します。 [レコメンデーションをエクスポート] を選択します。
エクスポート先の設定として、先程のS3バケットを選択します。 オプションでオブジェクトプレフィックスを指定できます。
組織内のすべてのメンバーアカウントの推奨事項を含めます。
にチェックを入れます。 Recommendation type を Idle recommendations
にします。
出力に含める列はとりあえず全て選択して、 [エクスポート] を実行しましょう。
キューに入れられたエクスポートジョブが「完了」になればOKです。
確認する
S3オブジェクトがある場所は ${S3バケット}/${指定したプレフィクス}/compute-optimizer/${AWSアカウントID}/
です。 「本体のCSV」と、「メタデータ(カラム名など)情報のJSON」 の2つが出力されます。
以下はCSVを見やすく整理したものです。(列名を日本語化 + 特定列のみ表記)
AWS CLIからエクスポートジョブを作成する
「エクスポートジョブを定期的に実行する機能」は 純粋な機能としてサポートされていません。
そのため、今後の自動化を見据えて API(AWS CLI)によるエクスポートジョブ実行を試してみます。
AWS CLI では推奨事項の種類ごとにコマンドが用意されています。
- export-auto-scaling-group-recommendations
- export-ebs-volume-recommendations
- export-ec2-instance-recommendations
- export-ecs-service-recommendations
- export-idle-recommendations
- export-lambda-function-recommendations
- export-license-recommendations
- export-rds-database-recommendations
例えば、先程の「アイドルリソースに関する推奨事項」エクスポートを AWS CLI で実施する場合は、以下のようなコマンドを実行します。
aws compute-optimizer export-idle-recommendations \
--region ap-northeast-1 --output yaml \
--include-member-accounts \
--s3-destination-config bucket="${S3バケット名}",keyPrefix="idle-recommendations" \
--file-format Csv \
--fields-to-export \
AccountId \
ResourceArn \
ResourceId \
ResourceType \
LastRefreshTimestamp \
LookbackPeriodInDays \
SavingsOpportunity \
SavingsOpportunityAfterDiscount \
UtilizationMetricsCpuMaximum \
UtilizationMetricsMemoryMaximum \
UtilizationMetricsNetworkOutBytesPerSecondMaximum \
UtilizationMetricsNetworkInBytesPerSecondMaximum \
UtilizationMetricsDatabaseConnectionsMaximum \
UtilizationMetricsEBSVolumeReadIOPSMaximum \
UtilizationMetricsEBSVolumeWriteIOPSMaximum \
UtilizationMetricsVolumeReadOpsPerSecondMaximum \
UtilizationMetricsVolumeWriteOpsPerSecondMaximum \
Finding \
FindingDescription \
Tags
# ----- ↓ 出力サンプル -----
# jobId: 0062df5c-e4d8-4571-a206-example
# s3Destination:
# bucket: ${S3バケット名}
# key: idle-recommendations/compute-optimizer/123456789012/ap-northeast-1-2024-12-03T200842Z-0062df5c-e4d8-4571-a206-example.csv
# metadataKey: idle-recommendations/compute-optimizer/123456789012/ap-northeast-1-2024-12-03T200842Z-0062df5c-e4d8-4571-a206-example-metadata.json
おわりに
Compute Optimizer の推奨事項をS3バケットにエクスポートしてみました。
Cost Optimization Hub のように日次エクスポートなどの機能は 標準で用意されていません。 そのためLambda や EventBridge を活用して、 定期的にS3へ出力する仕組みは有用です。 コスト最適化に関するダッシュボードを 継続的に運用していく際には検討したいです。
以上、参考になれば幸いです。
参考